perm filename P2LOAD.FAI[SS,SYS]3 blob
sn#434989 filedate 1979-04-25 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 A B C D TT1 TT2 TT3 TT4 P CTYLIN ACWPRV DEVPRV JOBSAV JOBDDT JOBSA P2SORG P2LOOP P2NUM HNGP2F JOBSYM P2SIZE P2BASE JLOG WENB P2SNAM NOREAD BUFLEN BLTLEN BUFFER BLTORG SAVORG ZERBEG ZEREND DEFNAM DEFPPN BUFIOW FILNAM EXT FILPPN PDLEN PDL START STRDET SEMILP SEMICL NOPRG SWITL NOPPN NOSWIT NOSEMI GETP2M GETP2X GOTP2M NOCLRC WIN NOTSYS RSKPSP SKIPSP GETWRD GETWR1 GETWR2 GETWR3 GETRT GETRT1 GETRT2 GETRT3 SYNTAX YESCHK NOUP NODOWN NOFILE NULFIL NOPRIV IOERR GOAWAY
C00019 ENDMK
C⊗;
;A B C D TT1 TT2 TT3 TT4 P CTYLIN ACWPRV DEVPRV JOBSAV JOBDDT JOBSA P2SORG P2LOOP P2NUM HNGP2F JOBSYM P2SIZE P2BASE JLOG WENB P2SNAM NOREAD BUFLEN BLTLEN BUFFER BLTORG SAVORG ZERBEG ZEREND DEFNAM DEFPPN BUFIOW FILNAM EXT FILPPN PDLEN PDL START STRDET SEMILP SEMICL NOPRG SWITL NOPPN NOSWIT NOSEMI GETP2M GETP2X GOTP2M NOCLRC WIN NOTSYS RSKPSP SKIPSP GETWRD GETWR1 GETWR2 GETWR3 GETRT GETRT1 GETRT2 GETRT3 SYNTAX YESCHK NOUP NODOWN NOFILE NULFIL NOPRIV IOERR GOAWAY
TITLE P2LOAD PROGRAM TO LOAD P2SYS INTO P2 MEMORY
A←1
B←2
C←3
D←4
TT1←5 ;Contains 'CTY'. All typeout goes both to TTY and to CTY.
TT2←6 ;Address of ASCIZ string to typeout
TT3←7 ;AC for TTYMES
TT4←10 ;Instruction to execute to (maybe) duplicate CTY typeout on TTY
P←17
CTYLIN←←200000 ;Line characteristics bit for CTY
ACWPRV←←40
DEVPRV←←400
JOBSAV←←73 ;LAST LOCATION NOT SAVED IN DUMP FILE
JOBDDT←←74 ;LOCATION OF DDT'S ADDRESS
JOBSA←←120 ;LOCATION OF STARTING ADDRESS
P2SORG←←200 ;FIRST LOCATION WE SHOULD LOAD FROM P2SYS FILE
P2LOOP←←101 ;HERE IS WHERE P2 WILL LOOP WAITING FOR US
P2NUM←←210 ;ZERO THIS TO TELL RUNNING P2 TO SHUT DOWN
HNGP2F←←212 ;SETOM THIS TO TELL P1 TO FLUSH ACTIVE P2 DEVICES
JOBSYM←←116 ;WHERE TO FIND SYMBOL TABLE POINTER
P2SIZE←←400 ;HOW MANY PAGES OF P2 CORE
P2BASE←←14000 ;BEGINNING PHYSICAL PAGE NUMBER OF P2 MEMORY
JLOG←←10000 ;JBTSTS BIT MEANING LOGGED IN
WENB←←20 ;WRITE ENABLE BIT FOR GETHI
P2SNAM←←224 ;LOCATION HOLDING 'P2SYS ' IF FILE IS P2 SYSTEM
OPDEF P2UUO [CALLI 400125] ;JUST UNTIL TOMORROW
NOREAD←←<P2SORG-JOBSAV>-1 ;NUMBER OF WORDS OF DMP FILE WE IGNORE
BUFLEN←←<NOREAD+177>&777600 ;LENGTH OF BUFFER WE READ INTO
BLTLEN←←BUFLEN-NOREAD ;HOW MANY WORDS WE HAVE TO BLT INTO P2 CORE
BUFFER: BLOCK BUFLEN ;HERE IS THE BUFFER
BLTORG←←BUFFER+NOREAD ;FIRST WORD WE CARE ABOUT
SAVORG←←BUFFER-<JOBSAV+1> ;ADDR X IN CORE IMAGE IS WORD SAVORG+X HERE
ZERBEG←←240 ;P2 ADDRESS OF BEGINNING OF AREA ZEROED
ZEREND←←37777 ;END OF AREA ZEROED TO TRAP P2 AT 141 (UUO LOC)
;ZEREND ISN'T SET TO -1 SINCE WE'D LIKE NOT TO CLOBBER ANY FONT COMPILER ALIVE
DEFNAM: SIXBIT /P2SYS DMP/
0
DEFPPN: SIXBIT / SSYS/
BUFIOW: IOWD BUFLEN,BUFFER
0
FILNAM: 0
EXT: 0
0
FILPPN: 0
PDLEN←←10
PDL: BLOCK PDLEN
START: RESET
SETZM GODOWN# ;ASSUME NOT WANTING TO PUT P2 MEMORY UP
SETZM GOUP# ;ASSUME NOT WANTING TO TAKE P2 MEMORY DOWN
SETZM CLRCOR# ;ASSUME NOT WANTING TO CLEAR CORE TO TRAP P2
SETZM QUIETF# ;ASSUME NOT WANTING TO LOAD P2 MEM EVEN IF DOWN
MOVEI A,0
JBTSTS A,
TLNN A,JLOG
OUTSTR [ASCIZ/
/] ;IN CASE NOT LOGGED IN
MOVE P,[IOWD PDLEN,PDL]
MOVSI A,ACWPRV!DEVPRV ;MUST BE ABLE TO WRITE P2 CORE
SETPRV A,
MOVSI TT1,'CTY' ;ALWAYS TYPE OUT ON CTY
MOVE TT4,[OUTSTR (TT2)] ;INSTRUCTION TO DUPLICATE TYPEOUT ON OWN TTY
SETOB A,DET# ;ASSUME DETACHED
GETLIN A ;SEE IF WE ARE DETACHED
AOJE A,STRDET ;JUMP IF DETACHED
SETZM DET ;FLAG NOT DETACHED
TLNE A,CTYLIN
MOVSI TT4,(<CAI>) ;WE'RE ON CTY, DON'T TYPE OUT EVERYTHING TWICE
STRDET: MOVE B,[DEFNAM,,FILNAM]
BLT B,FILPPN ;SET UP DEFAULT FILENAME
JUMPE A,NOSEMI ;JUMP IF DETACHED -- DON'T TRY TO SCAN FILENAME
RESCAN ;LOOK FOR NONSTANDARD FILENAME
SEMILP: INCHSL A ;READ A CHAR SEARCHING FOR SEMICOLON
JRST NOSEMI ;NOTHING TO READ, USE STANDARD FILE
CAIN A,";"
JRST SEMICL ;GOT ONE, NOW READ FILENAME
CAIE A,175
CAIN A,12
JRST NOSEMI ;END OF LINE WITH NO SEMI
JRST SEMILP ;ELSE KEEP LOOKING
SEMICL: PUSHJ P,GETWRD ;READ FILENAME
JUMPN B,.+2 ;MUST BE A FILENAME
MOVE B,DEFNAM ;ELSE WE USE THE DEFAULT
MOVEM B,FILNAM
MOVSI B,'DMP'
CAIN A,"." ;EXPLICIT EXTENSION?
PUSHJ P,GETWRD ;YES, READ IT
MOVEM B,EXT
MOVE D,DEFPPN ;DEFAULT PPN
CAIE A,"[" ;EXPLICIT PPN?
JRST NOPPN ;NO, USE STANDARD
MOVEI D,0
DSKPPN D, ;GET DEFAULT PPN
PUSHJ P,GETRT ;GET PRJ
JUMPE B,.+2 ; IF ANY
HRL D,B
CAIE A,"," ;EXPLICIT PRG?
JRST NOPRG ;NO
PUSHJ P,GETRT ;YES, READ IT
JUMPE B,.+2
HRR D,B
NOPRG: CAIN A,"]"
SWITL: PUSHJ P,RSKPSP ;SKIP BRACKET IF ANY (OR SWITCH CHAR)
NOPPN: CAIE A,"/"
JRST NOSWIT
PUSHJ P,RSKPSP ;GET NEXT CHAR
ANDI A,137 ;MAKE UPPER CASE
CAIN A,"D"
JRST [ SETOM GODOWN ;Wants to mark P2 memory down before loading
SETZM GOUP
JRST SWITL]
CAIN A,"U"
JRST [ SETOM GOUP ;Wants to mark P2 memory up before loading
SETZM GODOWN
JRST SWITL]
CAIN A,"C"
JRST [ SETOM CLRCOR ;Wants to clear core to try to trap P2 at 141
JRST SWITL]
CAIN A,"Q"
JRST [ SETOM QUIETF ;Wants to load P2 core even if it is "down"
JRST SWITL]
OUTSTR [ASCIZ\?Illegal switch: /\]
OUTCHR A
EXIT
NOSWIT: CAIE A,12
JRST SYNTAX ;MUST END WITH CRLF
MOVEM D,FILPPN
NOSEMI: SETO B,
SETPRV B, ;Get our privileges
TLNN B,ACWPRV ;Who are we to write P2 memory?
JRST NOPRIV ;Don't have ACW!
MOVE D,[FILNAM,,A]
BLT D,D ;GET FILENAME
INIT 17 ;OPEN THE DISK
'DSK '
0
JRST NOFILE
LOOKUP A ;FIND THE FILE
JRST NOFILE ;OOPS
HLRES D ;NEGATIVE LENGTH OF FILE
JUMPGE D,NULFIL ;JUMP IF EMPTY FILE, OR FILE BIGGER THAN 128K
CAML D,[-BUFLEN] ;FILE SMALLER THAN SIZE OF FIRST PART OF READ?
SKIPA C,D ;YES, READ SMALLER AMOUNT, SET ONE-PART FLAG
MOVEI C,-BUFLEN ;ZERO LH IS FLAG MEANING WANT TO READ IN 2 PARTS
HRLM C,BUFIOW ;AMOUNT TO READ
SETZM SAVORG+P2SNAM ;DON'T BE FOOLED BY SHORT FILE AND RESTARTING
IN BUFIOW ;READ FIRST PART OF FILE
JRST .+2 ;READ OK
JRST IOERR ;OOPS
;DON'T CLOBBER ACS C AND D BETWEEN HERE AND THE SECOND 'IN' UUO
MOVE A,SAVORG+P2SNAM ;GET NAME OF SYSTEM IF THIS IS P2 SYSTEM
CAME A,['P2SYS '] ;IF IT ISN'T P2 SYSTEM, THEN FORCE MEMORY DOWN
SETOM GODOWN ;DON'T LET P1 BE CONFUSED BY DIAGNOSTIC IN P2 MEM
SKIPE GODOWN
JRST [ P2UUO 3, ;TAKE P2 MEMORY DOWN
JRST NODOWN ;FAILED
JRST GETP2M] ;OK
SKIPE GOUP
P2UUO 2, ;PUT P2 MEMORY UP (NO FAILURE RETURN)
GETP2M: P2UUO 4, ;GET P2 MEMORY AS OUR UPPER
CAIA ;FAILED TO GET P2 MEM AS OUR UPPER
JRST GOTP2M ;Got P2 memory
MOVEI TT2,[ASCIZ /P2LOAD: Can't write P2 memory because it is down!
/]
SKIPE DET
JRST GOAWAY ;Detached, don't try to load down core
SKIPE QUIETF ;Skip unless he said /Q
JRST [ OUTSTR [ASCIZ/Suppes better be working or this will crash the system.
/]
MOVEI A,5
SLEEP A, ;Let him ponder that briefly
JRST GETP2X] ;But don't bother asking about going on
OUTSTR (TT2)
OUTSTR [ASCIZ/Do you want to load into Suppes anyway? /]
PUSHJ P,YESCHK
EXIT
OUTSTR [ASCIZ/If Suppes isn't working, this will crash the system.
Are you sure it is working? /]
PUSHJ P,YESCHK
EXIT
GETP2X: MOVEI TT2,[ASCIZ /Can't map Suppes memory into job's upper.
/]
MOVE A,[P2SIZE,,<P2BASE*40>+WENB>]
GETHI A,
JRST GOAWAY
GOTP2M: SETZM 400000+P2NUM ;TELL P2 TO SHUT DOWN WHILE WE LOAD IT
SETOM 400000+HNGP2F ;TELL P1 TO SHUT DOWN ACTIVE P2 DEVICES
SKIPN CLRCOR
JRST NOCLRC
SETZM 400000+141 ;CLOBBER UUO XCT LOCATION
SETZM 400000+ZERBEG ;AND CLEAR SOME OF CORE TO TRAP P2 THERE AT 141
MOVE A,[400000+ZERBEG,,400000+ZERBEG+1]
BLT A,400000+ZEREND ;DON'T CLOBBER ALL OF CORE, LEST FONT COMPILER THERE
NOCLRC: MOVE A,[BLTORG,,400000+P2SORG]
BLT A,400000+P2SORG+BLTLEN-1 ;COPY FIRST PART OF FILE INTO P2 CORE
MOVEI A,<P2SIZE⊗9>-1 ;HIGHEST LOCATION IN P2 CORE
MOVEM A,400037 ;DDT JOBREL
MOVE A,SAVORG+JOBSYM ;JOBSYM FROM FILE
MOVEM A,400036 ;SAVE HERE FOR DDT
MOVE A,SAVORG+JOBDDT ;JOBDDT FROM FILE
MOVEM A,400000+JOBDDT ;SAVE FOR P2INI
MOVSI A,BUFLEN(D) ;LENGTH OF FILE TO GO (NEGATIVE)
HRRI A,400000+P2SORG+BLTLEN-1
MOVEI B,0 ;END OF IOWD LIST
JUMPL C,WIN ;JUMP IF ONLY ONE READ WAS NEEDED
IN A ;READ REST DIRECTLY INTO P2 CORE
JRST WIN ;DONE!
MOVEI TT2,[ASCIZ /P2LOAD: Error in second part of read. Beware!
/]
JRST GOAWAY
WIN: MOVEI TT2,[ASCIZ /P2 loaded... /]
MOVEI TT3,TT1
TTYMES TT3,
JFCL
XCT TT4 ;Maybe type on own TTY too (if not same as CTY)
MOVE A,SAVORG+JOBSA ;Get starting address
HRLI A,(<JRST>)
MOVEM A,400000+P2LOOP ;IT'S BEEN JRSTING POINT HERE
MOVEM A,400000+141 ;OR MAYBE TRAPPING HERE
MOVE A,400000+P2SNAM
CAME A,['P2SYS ']
JRST NOTSYS ;CAN'T POSSIBLY BE A P2 SYSTEM
MOVEI A,2
SLEEP A, ;WAIT A WHILE
MOVE A,400000+P2NUM
MOVEI TT2,[ASCIZ /P2 needs to be started, at 204.
/]
JUMPE A,GOAWAY
MOVEI TT2,[ASCIZ /P2 running.
/]
AOJE A,GOAWAY
NOTSYS: MOVEI TT2,[ASCIZ /P2 loaded, but not with a P2 system!
/]
JRST GOAWAY
RSKPSP: INCHWL A ;SKIP TO A REAL CHAR
SKIPSP: CAIN A,15 ;IGNORE CR
JRST RSKPSP
CAIE A,40 ;IGNORE SPACE
CAIN A,11 ;IGNORE TAB
JRST RSKPSP
POPJ P,
GETWRD: PUSHJ P,RSKPSP ;SKIP PUNCTUATION CHAR BEFORE READING NAME
MOVEI B,0
MOVE C,[POINT 6,B]
GETWR1: CAILE A,140
SUBI A,40 ;LC TO UC
CAIL A,"A" ;HO HUM
CAILE A,"Z"
JRST GETWR3
GETWR2: SUBI A,40
TRNN B,77
IDPB A,C
INCHWL A
JRST GETWR1
GETWR3: CAIL A,"0"
CAILE A,"9"
JRST SKIPSP
JRST GETWR2
GETRT: PUSHJ P,RSKPSP ;SKIP PUNCTUATION CHAR BEFORE READING NAME
MOVEI B,0
MOVE C,[POINT 6,B]
GETRT1: CAILE A,140
SUBI A,40 ;LC TO UC
CAIL A,"A" ;HO HUM
CAILE A,"Z"
JRST GETRT3
GETRT2: LSH B,6
ADDI B,-40(A)
INCHWL A
JRST GETRT1
GETRT3: CAIL A,"0"
CAILE A,"9"
JRST SKIPSP
JRST GETRT2
SYNTAX: CLRBFI ;SORRY
OUTSTR [ASCIZ /Error in filename, try again.
/]
EXIT
YESCHK: CLRBFI
INCHWL A
CLRBFI
ANDI A,137 ;No bucky bits, upper case
CAIN A,"Y"
AOS (P) ;Skip on yes
POPJ P,
NODOWN: OUTSTR [ASCIZ /UUO to mark P2 memory down failed--probably not enough free core./]
EXIT
NOFILE: MOVEI TT2,[ASCIZ /P2LOAD: Can't look up file!
/]
JRST GOAWAY
NULFIL: MOVEI TT2,[ASCIZ /P2LOAD: Empty file!
/]
SKIPE D
MOVEI TT2,[ASCIZ /P2LOAD: File too big to load in P2 memory.
/]
JRST GOAWAY
NOPRIV: MOVEI TT2,[ASCIZ /P2LOAD: Not privileged to write P2 memory!
/]
SKIPE DET ;Skip unless detached
JRST GOAWAY ;Detached--type on CTY
OUTSTR (TT2) ;Just type on TTY
EXIT
IOERR: MOVEI TT2,[ASCIZ /P2LOAD: Error on first read. P2 core not modified.
/]
GOAWAY: MOVEI TT3,TT1
TTYMES TT3,
JFCL
XCT TT4 ;Maybe type on own TTY too (if not same as CTY)
EXIT
END START